package com.ermao.controller;

import com.ermao.pojo.Category;
import com.ermao.service.CategoryService;
import com.ermao.utils.CheckValidUtils;
import com.ermao.utils.Result;
import com.ermao.utils.ResultGenerator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author Ermao
 * Date: 2021/8/31 0:13
 */
@RestController
@RequestMapping("/api/v1/admins/categories")
@CrossOrigin(allowCredentials = "true", originPatterns = "http://localhost:*")
public class CategoryController {

	private CategoryService categoryService;

	@Autowired
	public void setCategoryService(CategoryService categoryService) {
		this.categoryService = categoryService;
	}

	/**
	 * 增加一个分类
	 * @param categoryType 分类类型： 0 代表收入，1 代表支出
	 * @param categoryName 分类名称：要求符合规范
	 * @return 返回结果对象
	 */
	@PostMapping("")
	public Result addCategory(@RequestParam("categoryType") Integer categoryType,
							  @RequestParam("categoryName") String categoryName) {
		if (!CheckValidUtils.checkCategoryNameValid(categoryName)) {
			return ResultGenerator.genFailResult("分类名错误");
		}
		if (categoryService.insertACategory(categoryType, categoryName)) {
			return ResultGenerator.genSuccessResult();
		} else {
			return ResultGenerator.genFailResult("增加分类失败");
		}
	}

	/**
	 * 通过分类 id 删除一个已经存在的分类
	 * @param categoryId 分类的 id
	 * @return 返回结果对象
	 */
	@DeleteMapping("/{categoryId}")
	public Result addCategory(@PathVariable("categoryId") Integer categoryId) {
		if (categoryService.deleteACategory(categoryId)) {
			return ResultGenerator.genSuccessResult();
		} else {
			return ResultGenerator.genFailResult("删除分类失败");
		}
	}

	/**
	 * 修改分类信息
	 * @param categoryId 分类 id
	 * @param categoryName 分类名
	 * @param categoryType 分类类型，收入还是支出
	 * @return 返回结果对象
	 */
	@PutMapping("")
	public Result modifyCategory(@RequestParam("categoryId") Integer categoryId,
								 @RequestParam("categoryName") String categoryName,
								 @RequestParam("categoryType") Integer categoryType) {
		if (!CheckValidUtils.checkCategoryTypeValid(categoryType)) {
			return ResultGenerator.genFailResult("收支类型错误");
		}
		if (!CheckValidUtils.checkCategoryNameValid(categoryName)) {
			return ResultGenerator.genFailResult("收支名称错误");
		}
		if (categoryService.updateACategory(categoryId, categoryType, categoryName)) {
			return ResultGenerator.genSuccessResult();
		} else {
			return ResultGenerator.genFailResult("修改分类信息失败");
		}
	}

	/**
	 * 通过分类名称查询分类的详细信息
	 * @param categoryName 分类名称
	 * @return 返回结果对象
	 */
	@GetMapping("/{categoryName}")
	public Result getCategoryByCategoryId(@PathVariable("categoryName") String categoryName) {
		Category category = categoryService.selectCategoryByCategoryName(categoryName);
		if (category != null) {
			return ResultGenerator.genSuccessResult(category);
		} else {
			return ResultGenerator.genFailResult("查询失败");
		}
	}

	/**
	 * 获取所以的分类信息
	 * @return 返回结果对象
	 */
	@GetMapping("")
	public Result getAllCategories() {
		List<Category> categories = categoryService.selectAllCategories();
		if (categories != null) {
			return ResultGenerator.genSuccessResult(categories);

		} else {
			return ResultGenerator.genFailResult("查询所有分类失败");
		}
	}
}
